from pyecharts import options as opts
from pyecharts.charts import Pie
from pyecharts.charts import Page
import pandas as pd


# 1.编写函数-可以创建一个pyecharts饼图对象
def create_pie(datas, title) -> Pie:
    """ 创建饼图对象
    文档地址：https://pyecharts.org/#/zh-cn/basic_charts?id=pie%ef%bc%9a%e9%a5%bc%e5%9b%be
    @param datas: 数据，形式为[('晴', 115), ('多云', 78), ('晴~多云', 39)]
    @param title: 图表的标题
    """
    pie = Pie()
    pie.add(series_name="", data_pair=datas)
    pie.set_global_opts(
        title_opts=opts.TitleOpts(title=title),
        legend_opts=opts.LegendOpts(pos_right="right")
    )
    pie.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}:{d}%"))
    return pie


# 2. 读取北京天气2019年数据
path = './Files/beijing_tianqi_2019.csv'
df = pd.read_csv(path)

# 3.天气分布
df_tianqi = df.groupby("tianqi").size().sort_values(ascending=False)
datas_tianqi = list(zip(df_tianqi.index.to_list(), df_tianqi.to_list()))
pie_tianqi = create_pie(datas_tianqi, "北京2019年天气分布")

# 4.风向分布
df_fengxiang = df.groupby("fengxiang").size().sort_values(ascending=False)
datas_fengxiang = list(zip(df_fengxiang.index.to_list(), df_fengxiang.to_list()))
pie_fengxiang = create_pie(datas_fengxiang, "北京2019年风向分布")

# 5.空气质量分布
df_aqiInfo = df.groupby("aqiInfo").size().sort_values(ascending=False)
datas_aqiInfo = list(zip(df_aqiInfo.index.to_list(), df_aqiInfo.to_list()))
pie_aqiInfo = create_pie(datas_aqiInfo, "北京2019年空气质量分布")

# 6.将图片渲染到一个Html中
page = Page()
page.add(pie_tianqi, pie_fengxiang, pie_aqiInfo)
page.render('./Files/beijing_tianqi_2019.html')
